"""日志系统配置文件
提供统一的日志配置和管理功能
"""

import os
import logging
import logging.handlers
from typing import Dict, Any
from pathlib import Path

# 日志级别映射
LOG_LEVELS = {
    'DEBUG': logging.DEBUG,
    'INFO': logging.INFO,
    'WARNING': logging.WARNING,
    'ERROR': logging.ERROR,
    'CRITICAL': logging.CRITICAL
}

# 日志分类定义
LOG_CATEGORIES = {
    'DATABASE': 'database',
    'API': 'api',
    'ERROR': 'error',
    'USER': 'user',
    'SYSTEM': 'system',
    'BUSINESS': 'business'
}

# 默认日志配置
DEFAULT_LOG_CONFIG = {
    'level': os.getenv('LOG_LEVEL', 'INFO'),
    'log_dir': os.getenv('LOG_DIR', './logs'),
    'max_file_size': int(os.getenv('LOG_MAX_SIZE', '10')) * 1024 * 1024,  # 10MB
    'backup_count': int(os.getenv('LOG_BACKUP_COUNT', '5')),
    'json_format': os.getenv('LOG_JSON_FORMAT', 'false').lower() == 'true',
    'console_output': os.getenv('LOG_CONSOLE_OUTPUT', 'true').lower() == 'true'
}

# 日志格式定义
LOG_FORMATS = {
    'standard': '[%(asctime)s] %(levelname)s [%(category)s] [%(name)s] - %(message)s',
    'detailed': '[%(asctime)s] %(levelname)s [%(category)s] [%(name)s:%(lineno)d] - %(message)s',
    'simple': '%(levelname)s [%(category)s] - %(message)s'
}

class CategoryFilter(logging.Filter):
    """日志分类过滤器"""
    
    def __init__(self, category: str):
        super().__init__()
        self.category = category
    
    def filter(self, record):
        return hasattr(record, 'category') and record.category == self.category

class ColoredFormatter(logging.Formatter):
    """彩色日志格式化器"""
    
    # ANSI颜色代码
    COLORS = {
        'DEBUG': '\033[36m',      # 青色
        'INFO': '\033[32m',       # 绿色
        'WARNING': '\033[33m',    # 黄色
        'ERROR': '\033[31m',      # 红色
        'CRITICAL': '\033[35m',   # 紫色
        'RESET': '\033[0m'        # 重置
    }
    
    def format(self, record):
        # 添加颜色
        if hasattr(record, 'levelname'):
            color = self.COLORS.get(record.levelname, self.COLORS['RESET'])
            record.levelname = f"{color}{record.levelname}{self.COLORS['RESET']}"
        
        return super().format(record)

def setup_logging_config():
    """设置日志配置"""
    # 创建日志目录
    log_dir = Path(DEFAULT_LOG_CONFIG['log_dir'])
    log_dir.mkdir(exist_ok=True)
    
    # 配置根日志记录器
    logging.basicConfig(
        level=LOG_LEVELS.get(DEFAULT_LOG_CONFIG['level'], logging.INFO),
        format=LOG_FORMATS['standard'],
        handlers=[]
    )